/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AlgoritmoPronostico;

import beans.Mapa;
import beans.Pedido;
import facade.PronosticoFacade;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import packetTracker.Dispatcher;
import packetTracker.PacketTracker;

/**
 *
 * @author Ahmed
 */
public class Despachador {
    private static int idPedidoInt=1;
    private static int contDias = 0;
    private static ArrayList<Pedido> _pedidos = new ArrayList<>();
    private static int idPedido = 1;
    public static int[] pedidos_x_dia = new int[369];
    public static int[] paquetes_x_dia = new int[369];
    
    public static void leerBloqueos() {
        BufferedReader r = null;
        try {
            String ruta = PronosticoFacade.getInstancia().getServletContext().getRealPath("") + "/WEB-INF/files/" + "bloqueos.txt";
            r = new BufferedReader(new FileReader(ruta));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Dispatcher.class.getName()).log(Level.SEVERE, null, ex);
            return;
        }
        String line = null;
        String[] toks;
        int x = 0, y = 0, nPaq = 0, idCliente = 0, tiempoEntrega = 0;
        ArrayList<Pedido> grafo = new ArrayList<>();
        while (true) {
            try {
                line = r.readLine();
            } catch (IOException ex) {
                Logger.getLogger(Dispatcher.class.getName()).log(Level.SEVERE, null, ex);
                return;
            }
            if (line == null || line.length() == 0) {
                break;
            }
            toks = line.split(",");
            String hora = toks[0].trim();
            x = Integer.parseInt(toks[1]);
            y = Integer.parseInt(toks[2]);
            Mapa.getPunto(x, y).bloquear();
        }
    }

    
    public static boolean leerEventosDia(String dia, String mes, String anho)  {
        int cantPedidos = 0;
        int cantPaquetes = 0;
        BufferedReader r = null;
        try {
            String ruta = PronosticoFacade.getInstancia().getServletContext().getRealPath("") /*"C:\\Users\\Ahmed\\Desktop\\PacketTracker-18062013\\web*/ +"/WEB-INF/filesPronostico/" + "dat" + anho + mes + dia + ".txt";
            System.out.println(ruta);
            r = new BufferedReader(new FileReader(ruta));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Dispatcher.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
        int i = 0;
        String line = null;
        String[] toks;
        int x = 0, y = 0, nPaq = 0, idCliente = 0, tiempoEntrega = 0;
        ArrayList<Pedido> grafo = new ArrayList<>();
        while (true) {
            try {
                line = r.readLine();
            } catch (IOException ex) {
                Logger.getLogger(Dispatcher.class.getName()).log(Level.SEVERE, null, ex);
                return false;
            }
            if (line == null || line.length() == 0) {
                break;
            }
            toks = line.split(",");
            String hora = toks[0];
            x = Integer.parseInt(toks[1]);
            y = Integer.parseInt(toks[2]);
            nPaq = Integer.parseInt(toks[3]);
            idCliente = Integer.parseInt(toks[4]);
            tiempoEntrega = Integer.parseInt(toks[5]);
            Calendar fechaPedido = (Calendar) Calendar.getInstance().clone();
            fechaPedido.set(Integer.parseInt(anho), Integer.parseInt(mes)-1, Integer.parseInt(dia), Integer.parseInt(hora.substring(0,2)), Integer.parseInt(hora.substring(3,5)));
            Pedido pedido = new Pedido(x,y,nPaq,tiempoEntrega,fechaPedido,idPedidoInt++, "Pendiente");
            cantPaquetes = cantPaquetes + nPaq;
            cantPedidos++;

            if (nPaq > 0) //Se pone solo para evitar problemas del archivo generado
                grafo.add(pedido);
        }
        pedidos_x_dia[contDias] = cantPedidos;
        paquetes_x_dia[contDias] = cantPaquetes;
        System.out.println("................"+cantPedidos + " - " + cantPaquetes);
        contDias++;
        _pedidos.addAll(grafo);
        return true;
    }

    public static ArrayList<Pedido> siguientesPedidos(int hora, int minuto) {
        config.Reloj reloj = config.Reloj.getInstancia();
        ArrayList<Pedido> pedidosSiguientes = new ArrayList<>();
        for(Pedido pedido:_pedidos){
            if (pedido.getHoraPedido()*60 + pedido.getMinutoPedido() <= hora*60 + minuto){
                pedidosSiguientes.add(pedido);
            }
        }
        _pedidos.removeAll(pedidosSiguientes);
        return pedidosSiguientes;
    }
    
    static boolean finPedidos(){
        return _pedidos.isEmpty();
    }

    static ArrayList<Pedido> getColaPedidos() {
        return _pedidos;
    }
}
